Yiksan0315's Blog

RNN with Keras, scikit-learn

# Tag:


RNN with Keras, scikit-learn

데이터 전처리

from keras.models import Sequential from keras.layers import SimpleRNN, Dense from sklearn.preprocessing import MinMaxScaler from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split dataframe = read_csv('', usecols=[3], engine='python', skipfooter=3) dataset = dataframe.values dataset = dataset.astype('float32') scaler = MinMaxScaler(feature_range=(0, 1)) Dataset = scaler.fit_transform(dataset) #Normalization train_data, test_data = train_test_split(Dataset, test_size=0.2, shuffle=False)
  •  from sklearn.model_selection import train_test_split: 데이터를 훈련 데이터와 검증 데이터로 나눔.
    • test_size를 통해 검증 데이터 비율을 정함.
    • shuffle: 순서가 중요한 시계열 데이터에는 사용하지 않음.
  • from sklearn.preprocessing import MinMaxScaler: 데이터의 Nomalization. feature_range을 통해 Nomarlization 범위를 설정한다.
  •  from sklearn.metrics import mean_squared_error: 결과의 정확도를 계산하기 위한 함수, 실제 값과 예측 값의 차이를 사용하여 Loss 구한다.

시계열 데이터

def create_dataset(dataset, look_back): x_data = [] y_data = [] for i in range(len(dataset)-look_back-1): data = dataset[i:(i+look_back), 0] x_data.append(data) y_data.append(dataset[i + look_back, 0]) return np.array(x_data), np.array(y_data) look_back = 3 x_train, y_train = create_dataset(train_data, look_back) x_test, y_test = create_dataset(test_data, look_back) X_train = np.reshape(x_train, (x_train.shape[0], 1, x_train.shape[1])) X_test = np.reshape(x_test, (x_test.shape[0], 1, x_test.shape[1])) # 85 x 3 => 85 x 1 x 3, (1 x 3) 크기의 배열을 85개로 나누어 넣기 위함.

RNN 모델 설계

model = Sequential() model.add(SimpleRNN(3, input_shape=(1, look_back))) model.add(Dense(1, activation="linear")) # 연속된 데이터 이후의 값으로, 예측값. 1개의 노드만 설정(출력층) model.compile(loss='mse', optimizer='adam') model.fit(X_train, y_train, epochs=100, batch_size=1, verbose=1)
  • SimpleRNN: (Node 갯수, input_shape)
  • mse: 평균 제곱 오차(mean_squared_error)

데이터 역정규화

trainPredict = model.predict(X_train) testPredict = model.predict(X_test) TrainPredict = scaler.inverse_transform(trainPredict) Y_train = scaler.inverse_transform([y_train]) TestPredict = scaler.inverse_transform(testPredict) Y_test = scaler.inverse_transform([y_test])

오차 구하기

trainScore = math.sqrt(mean_squared_error(Y_train[0], TrainPredict[:,0])) testScore = math.sqrt(mean_squared_error(Y_test[0], TestPredict[:,0]))
toc test

이 페이지는 리디주식회사에서 제공한 리디바탕 글꼴이 사용되어 있습니다. 리디바탕의 저작권은 리디주식회사가 소유하고 있습니다.

This Font Software is licensed under the SIL Open Font License, Version 1.1.

Copyright 2025. yiksan0315 All rights reserved.